from rest_framework.response import Response
from rest_framework.views import exception_handler
from django.db import DatabaseError
from rest_framework import status
import logging

logger = logging.getLogger("django")


def custom_exception_handler(exc,context):
    # 自定义异常处理exc异常类，context抛出异常的上下文
    # 调用drf框架原生异常处理方法
    response = exception_handler(exc,context)
    if response is None:
        view = context['view']
        if isinstance(exc,DatabaseError):
            logger.error("[%s] %s" % (view,exc))
            # 如果是数据库异常，返回自定义的数据库异常信息
            response = Response({'error':'服务器繁忙,请稍后再试...'},status=status.HTTP_507_INSUFFICIENT_STORAGE)
        elif isinstance(exc,ZeroDivisionError):
            # 如果是除数为零异常，返回自定义的除数为零异常信息
            response = Response({'error':'服务器繁忙,请稍后再试...'},status=status.HTTP_500_INTERNAL_SERVER_ERROR)
    return response